{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2024-01-13T06:35:35.812444300Z",
     "start_time": "2024-01-13T06:35:30.798754600Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "import tensorflow as tf\n",
    "import keras\n",
    "from keras.models import Sequential\n",
    "\n",
    "from keras.layers import Dense, Dropout, Activation, BatchNormalization\n",
    "\n",
    "from keras import utils\n",
    "#正则化\n",
    "from keras import regularizers\n",
    "\n",
    "#数据集，手写数字\n",
    "# from keras.datasets import mnist # 被墙了要手动下载"
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "# 加载数据"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "8edf2e24ca0ef855"
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "outputs": [],
   "source": [
    "data = pd.read_csv(\"D://data//digit-recognizer//train.csv\")"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-13T06:35:39.325328200Z",
     "start_time": "2024-01-13T06:35:36.572748200Z"
    }
   },
   "id": "1b60f694f158ab46"
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(42000, 784)\n"
     ]
    }
   ],
   "source": [
    "# 笨方法\n",
    "# cols = np.array([\"pixel\" + str(i) for i in range(784)])\n",
    "# cols\n",
    "x = data.iloc[:, 1:]\n",
    "print(x.shape)\n",
    "# 目标值\n",
    "y = data.iloc[:, 0]\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-13T06:35:42.156448500Z",
     "start_time": "2024-01-13T06:35:42.138441400Z"
    }
   },
   "id": "c58b293cd809b5c7"
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": "7"
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "num = 18\n",
    "numStr = x.iloc[num,].values.reshape(28, 28)\n",
    "plt.imshow(numStr)\n",
    "plt.axis(\"off\")\n",
    "plt.show()\n",
    "y[num]"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-12T14:20:34.674377600Z",
     "start_time": "2024-01-12T14:20:34.587426600Z"
    }
   },
   "id": "7b1c74388c133f01"
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "outputs": [
    {
     "data": {
      "text/plain": "(42000, 784)"
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 1.维度调整，2.数据类型调整，3.归一化\n",
    "x = x.values / 255\n",
    "x.shape\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-13T06:35:48.941432100Z",
     "start_time": "2024-01-13T06:35:48.742530400Z"
    }
   },
   "id": "ac20b9c270ba3c6c"
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "outputs": [
    {
     "data": {
      "text/plain": "array([[0., 0., 0., ..., 0., 0., 0.],\n       [0., 0., 0., ..., 0., 0., 0.],\n       [0., 0., 0., ..., 0., 0., 0.],\n       ...,\n       [0., 0., 0., ..., 0., 0., 0.],\n       [0., 0., 0., ..., 0., 0., 0.],\n       [0., 0., 0., ..., 0., 0., 0.]])"
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-13T06:35:52.880661300Z",
     "start_time": "2024-01-13T06:35:52.859656Z"
    }
   },
   "id": "d54f4d8ce55b3d93"
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "outputs": [],
   "source": [
    "y = y.values"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-13T06:35:55.999338400Z",
     "start_time": "2024-01-13T06:35:55.917364400Z"
    }
   },
   "id": "d4f2829bb58aea6a"
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "outputs": [],
   "source": [
    "x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=0, train_size=0.8)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-13T06:36:01.986835400Z",
     "start_time": "2024-01-13T06:36:00.817479200Z"
    }
   },
   "id": "4dabb640fad16be6"
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "outputs": [
    {
     "data": {
      "text/plain": "(33600, 784)"
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train.shape"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-13T06:36:03.326746500Z",
     "start_time": "2024-01-13T06:36:03.281756400Z"
    }
   },
   "id": "e51b3411e403575e"
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "outputs": [
    {
     "data": {
      "text/plain": "(8400, 784)"
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_test.shape"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-13T06:36:04.629421100Z",
     "start_time": "2024-01-13T06:36:04.594425100Z"
    }
   },
   "id": "4a808eb3b689c126"
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "outputs": [
    {
     "data": {
      "text/plain": "(33600,)"
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train.shape"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-13T06:36:08.236940300Z",
     "start_time": "2024-01-13T06:36:08.220935900Z"
    }
   },
   "id": "558dc823b2066838"
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "outputs": [
    {
     "data": {
      "text/plain": "(8400,)"
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_test.shape"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-13T06:36:08.859233300Z",
     "start_time": "2024-01-13T06:36:08.831096100Z"
    }
   },
   "id": "1a28bd69bdfee6f1"
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "outputs": [],
   "source": [
    "y_train = utils.to_categorical(y_train, 10)\n",
    "y_test = utils.to_categorical(y_test, 10)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-13T06:36:10.549255300Z",
     "start_time": "2024-01-13T06:36:10.529247900Z"
    }
   },
   "id": "7d59290eb3ce1d27"
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "outputs": [],
   "source": [
    "# X不需要\n",
    "# x_train_reshape = utils.to_categorical(x_train,10)\n",
    "# x_test_reshape = utils.to_categorical(x_test,10)\n",
    "# x_train_reshape"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-12T13:53:55.810656300Z",
     "start_time": "2024-01-12T13:53:54.813227500Z"
    }
   },
   "id": "3eb9515454d43a1c"
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "outputs": [
    {
     "data": {
      "text/plain": "(33600, 10)"
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train.shape"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-13T06:36:12.980230500Z",
     "start_time": "2024-01-13T06:36:12.961219800Z"
    }
   },
   "id": "83081ffe781c2b08"
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "outputs": [
    {
     "data": {
      "text/plain": "array([[0., 0., 0., ..., 0., 0., 0.],\n       [0., 0., 0., ..., 0., 0., 0.],\n       [0., 0., 0., ..., 0., 0., 1.],\n       ...,\n       [0., 0., 1., ..., 0., 0., 0.],\n       [0., 0., 0., ..., 1., 0., 0.],\n       [0., 0., 1., ..., 0., 0., 0.]], dtype=float32)"
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_test"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-13T06:32:29.430783600Z",
     "start_time": "2024-01-13T06:32:29.388693500Z"
    }
   },
   "id": "b62e7c11b7e20f91"
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 深度学习"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "1482d599234f1592"
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "outputs": [],
   "source": [
    "# model = Sequential([\n",
    "#     Dense(512,input_shape=(28,28),Activation=\"relu\",Dropout=0.2),\n",
    "#     Dense(512,kernel_regularizer=regularizers.l2(0.001))\n",
    "# ])\n",
    "model = Sequential()\n",
    "# 输入层，512个神经元，先激活后BC，随机失活\n",
    "# model.add(Dense(512,input_shape=(28,28)))\n",
    "model.add(Dense(512, input_shape=(784,), activation=\"relu\"))\n",
    "model.add(BatchNormalization())\n",
    "model.add(Dropout(0.2))\n",
    "# 第一层+BN层\n",
    "model.add(Dense(512, kernel_regularizer=regularizers.l2(0.001)))\n",
    "model.add(BatchNormalization())\n",
    "model.add(Activation(\"relu\"))\n",
    "model.add(Dropout(0.2))\n",
    "\n",
    "# 全连接层，输出层数10个神经元\n",
    "model.add(Dense(10))\n",
    "# softmax将神经网络输出的score转换为概率值\n",
    "model.add(Activation(\"softmax\"))\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-13T06:36:18.342265500Z",
     "start_time": "2024-01-13T06:36:18.121289800Z"
    }
   },
   "id": "84b261388736a636"
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential\"\n",
      "_________________________________________________________________\n",
      " Layer (type)                Output Shape              Param #   \n",
      "=================================================================\n",
      " dense (Dense)               (None, 512)               401920    \n",
      "                                                                 \n",
      " batch_normalization (BatchN  (None, 512)              2048      \n",
      " ormalization)                                                   \n",
      "                                                                 \n",
      " dropout (Dropout)           (None, 512)               0         \n",
      "                                                                 \n",
      " dense_1 (Dense)             (None, 512)               262656    \n",
      "                                                                 \n",
      " batch_normalization_1 (Batc  (None, 512)              2048      \n",
      " hNormalization)                                                 \n",
      "                                                                 \n",
      " activation (Activation)     (None, 512)               0         \n",
      "                                                                 \n",
      " dropout_1 (Dropout)         (None, 512)               0         \n",
      "                                                                 \n",
      " dense_2 (Dense)             (None, 10)                5130      \n",
      "                                                                 \n",
      " activation_1 (Activation)   (None, 10)                0         \n",
      "                                                                 \n",
      "=================================================================\n",
      "Total params: 673,802\n",
      "Trainable params: 671,754\n",
      "Non-trainable params: 2,048\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model.summary()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-13T06:36:19.334035Z",
     "start_time": "2024-01-13T06:36:19.248068400Z"
    }
   },
   "id": "babc0f518921b0bc"
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": "<IPython.core.display.Image object>"
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "utils.plot_model(model)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-12T14:21:02.497872400Z",
     "start_time": "2024-01-12T14:21:01.703324800Z"
    }
   },
   "id": "c0552a492dfd70cf"
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 模型编译"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "4a5cdb202dfb494c"
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "outputs": [],
   "source": [
    "# 需要参数：损失函数，优化器，评价指标\n",
    "model.compile(loss=tf.losses.categorical_crossentropy,\n",
    "              optimizer=tf.optimizers.Adam(),\n",
    "              metrics=tf.metrics.Accuracy()\n",
    "              )"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-13T06:36:22.738328600Z",
     "start_time": "2024-01-13T06:36:22.684344400Z"
    }
   },
   "id": "71611314fdbcfbb2"
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 模型训练"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "b973803bb70e5eab"
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/4\n",
      "263/263 [==============================] - 5s 12ms/step - loss: 0.6512 - accuracy: 0.0000e+00 - val_loss: 0.4627 - val_accuracy: 0.0000e+00\n",
      "Epoch 2/4\n",
      "263/263 [==============================] - 3s 10ms/step - loss: 0.3148 - accuracy: 0.0000e+00 - val_loss: 0.2589 - val_accuracy: 0.0000e+00\n",
      "Epoch 3/4\n",
      "263/263 [==============================] - 3s 10ms/step - loss: 0.2006 - accuracy: 0.0000e+00 - val_loss: 0.2042 - val_accuracy: 0.0000e+00\n",
      "Epoch 4/4\n",
      "263/263 [==============================] - 3s 10ms/step - loss: 0.1550 - accuracy: 0.0000e+00 - val_loss: 0.1753 - val_accuracy: 0.0000e+00\n"
     ]
    }
   ],
   "source": [
    "# fit,需要参数，:指定训练集，epochs,bath_size,val,verbose\n",
    "history = model.fit(x_train,\n",
    "                    y_train,  #\n",
    "                    epochs=4,\n",
    "                    batch_size=128,\n",
    "                    validation_data=(x_test,\n",
    "                                     y_test  #\n",
    "                                     ),\n",
    "                    verbose=1)\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-13T06:36:38.326441900Z",
     "start_time": "2024-01-13T06:36:25.430194Z"
    }
   },
   "id": "1c363b2139fc8537"
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\events.py:89: UserWarning: Glyph 35757 (\\N{CJK UNIFIED IDEOGRAPH-8BAD}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\events.py:89: UserWarning: Glyph 32451 (\\N{CJK UNIFIED IDEOGRAPH-7EC3}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\events.py:89: UserWarning: Glyph 38598 (\\N{CJK UNIFIED IDEOGRAPH-96C6}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\events.py:89: UserWarning: Glyph 27979 (\\N{CJK UNIFIED IDEOGRAPH-6D4B}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\events.py:89: UserWarning: Glyph 35797 (\\N{CJK UNIFIED IDEOGRAPH-8BD5}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\events.py:89: UserWarning: Glyph 39564 (\\N{CJK UNIFIED IDEOGRAPH-9A8C}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\events.py:89: UserWarning: Glyph 35777 (\\N{CJK UNIFIED IDEOGRAPH-8BC1}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\pylabtools.py:152: UserWarning: Glyph 35757 (\\N{CJK UNIFIED IDEOGRAPH-8BAD}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\pylabtools.py:152: UserWarning: Glyph 32451 (\\N{CJK UNIFIED IDEOGRAPH-7EC3}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\pylabtools.py:152: UserWarning: Glyph 38598 (\\N{CJK UNIFIED IDEOGRAPH-96C6}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\pylabtools.py:152: UserWarning: Glyph 27979 (\\N{CJK UNIFIED IDEOGRAPH-6D4B}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\pylabtools.py:152: UserWarning: Glyph 35797 (\\N{CJK UNIFIED IDEOGRAPH-8BD5}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\pylabtools.py:152: UserWarning: Glyph 39564 (\\N{CJK UNIFIED IDEOGRAPH-9A8C}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\pylabtools.py:152: UserWarning: Glyph 35777 (\\N{CJK UNIFIED IDEOGRAPH-8BC1}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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9R988EEefPDBSq/33HPP8dxzz11wmYvVdepFe799N40ZKr3X6dOnM27cOO69917at2/PjBkziI6OZtasWRUu/+2337Js2TIWLVrEVVddRfPmzenduzf9+vW75OLdzanuGj9PG78kHeedn5LMLklERMTtVerKSHFxMevXry9/498p8fHxrF69usJ1vvzyS3r16sXUqVN577338PPz44YbbuAf//jHeW+IKSoqoqioqPzzqTcQlpSUUFJSUpmSL+jUtqpzm6H+diYOb8OUr7Yz9dsdDGrVmJjG7jWaX1XVRHvVV2or16mtXFef26q0tBSn00lZWVn5G2MvxakxOZxOZ7Vsrz671LYqKyvD6XRSWlp6zrnp6rlaqTCSmZlJWVkZoaGhZ80PDQ0lPT29wnX27dvHypUr8fb25vPPPyczM5Px48dz7Ngx5syZU+E6L7zwAs8888w58xcvXoyvb/X/Yk9ISKjW7QU5oVWglT05cP/s5Yzv4KA+9dZUd3vVZ2or16mtXFcf28pisRAeHs6xY8cICAiotu3W9tMndVlV2yo3N5f8/Hx+/PHHcwZmc3UY+SrdwGr5zVC5TqfznHmnOBwOLBYLH3zwAUFBxtttp0+fzqhRo3j11VcrvDoyefJkJkyYUP45JyeH6Oho4uPjq/WthSUlJSQkJDBs2DDsdnu1bRegc98Crn9lNbtzIKdpR0b3jq7W7ZuhJturvlFbuU5t5br63laHDx8mJycHb29vfH19z/t7xRVOp5P8/Hz8/PwuaTsNQVXbyul0UlBQQG5uLuHh4XTr1u2cZU71bFxMpcJISEgINpvtnKsgGRkZ51wtOSU8PJzIyMjyIALQvn17nE4nKSkptG597gvmvLy88PLyOme+3W6vkf8Ba2K7rUKDmDi8Hc8u3MbU73YxtEMYUY3qR3dNTf051EdqK9eprVxXX9sqMjISm81GZmbmJW/L6XRy4sQJfHx8FEYu4lLbqlGjRoSFhVW4rqvnaaXCiKenJz179iQhIYGbbrqpfH5CQgIjR46scJ3+/fvz6aefkpeXh7+/8ajrrl27yh9pqs/u6decRYlprDtwnMnzE3l3bG/9TyEich6numqaNWt2yffFlJSUsHz5cgYNGlQvg1t1upS2stvtZz0SXFWV7qaZMGECd911F7169aJv37688cYbJCcnc//99wNGF8uhQ4d4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vCKeXbjN7HJERKQBqnQYmT59OuPGjePee++lffv2zJgxg+joaGbNmnXB9Zo1a0ZYWFj5ZLPZqly0VB9vu41po7pgtcDnGw/xw/bDZpckIiINjEdlFi4uLmb9+vVMmjTprPnx8fGsXr36gut2796dwsJCOnTowFNPPcWQIUPOu2xRURFFRaef8MjJyQGgpKSEkpKSypR8Qae2VZ3brIs6hfvzh36xzF51gCfmJ7LooQACfeznLKf2cp3aynVqK9eprVyntnJdTbaVq9u0OCsx6lVqaiqRkZGsWrWKfv36lc9//vnneeedd9i5c+c56+zcuZPly5fTs2dPioqKeO+993jttddYunQpgwYNqnA/U6ZM4Zlnnjln/ocffoivr6+r5UolFJfB1M02jhRauLypg9GtHGaXJCIidVxBQQGjR48mOzubwMDA8y5XpTCyevVq+vbtWz7/ueee47333nP5ptTrr78ei8XCl19+WeH3FV0ZiY6OJjMz84IHU1klJSUkJCQwbNgw7PZzrwQ0NOsOHGf07F9wOmHO3T0Y2DrkrO/VXq5TW7lObeU6tZXr1Fauq8m2ysnJISQk5KJhpFLdNCEhIdhsNtLTz34MNCMjg9DQUJe306dPH95///3zfu/l5YWXl9c58+12e42cVDW13bqmb6tmjOnbnLdXJ/HUF9v47pFBBHif2y5qL9eprVyntnKd2sp1aivX1URbubq9St3A6unpSc+ePUlISDhrfkJCwlndNhezceNGwsPDK7NrqSWPXd2WmMa+pGYX8sI3evxaRERqXqWujABMmDCBu+66i169etG3b1/eeOMNkpOTuf/++wGYPHkyhw4d4t133wVgxowZNG/enI4dO1JcXMz777/PvHnzmDdvXvUeiVQLX08PXrqlC3f83xo+/DmZ6zqH069VyMVXFBERqaJKh5HbbruNo0eP8uyzz5KWlkanTp1YtGgRsbGxAKSlpZ015khxcTGPPvoohw4dwsfHh44dO/L1119zzTXXVN9RSLXq27IJv+8Tw/trknls3ma+e3gQfl6VPlVERERcUqXfMOPHj2f8+PEVfvf222+f9fmxxx7jscceq8puxESTRrRnyY4jpBw/wdRvd/DMyE5mlyQiIvWU3k0jFfL38uDFWzoD8M5PB/h531GTKxIRkfpKYUTOa2Drptx+WTQAj83bzIniMpMr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fPl9+/Y5fX19nY888ohz27ZtztmzZzvtdrvzs88+M+sQak1l2+o///mP8/PPP3fu2rXLuWXLFuekSZOcgHPevHlmHUKtyc3NdW7cuNG5ceNGJ+CcPn26c+PGjc4DBw44nU6dV2eqbFs15PPqT3/6kzMoKMi5dOlSZ1paWvlUUFBQvozOLUNV2qqhnluTJ092Ll++3Ll//37n5s2bnU888YTTarU6Fy9e7HQ63eecqtdhxOl0Ol999VVnbGys09PT09mjR4+zHv0aM2aM84orrjhr+aVLlzq7d+/u9PT0dDZv3tw5a9asWq7YPJVpq5deesnZsmVLp7e3t7NRo0bOAQMGOL/++msTqq59px4R/O00ZswYp9Op8+pMlW2rhnxeVdROgPOtt94qX0bnlqEqbdVQz62xY8eW/73etGlT59ChQ8uDiNPpPueUxek8eWeKiIiIiAnq7T0jIiIiUjcojIiIiIipFEZERETEVAojIiIiYiqFERERETGVwoiIiIiYSmFERERETKUwIiIiIqZSGBERERFTKYyIiIiIqRRGRERExFQKIyIiImKq/w8BbbS1SH9CsQAAAABJRU5ErkJggg=="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制损失\n",
    "plt.figure()\n",
    "plt.plot(history.history['loss'], label='训练集')\n",
    "plt.plot(history.history['val_loss'], label=\"测试集(验证集)\")\n",
    "plt.legend()\n",
    "plt.grid()\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-13T06:36:51.044314700Z",
     "start_time": "2024-01-13T06:36:50.528406300Z"
    }
   },
   "id": "ed0524345f4fa3d1"
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\events.py:89: UserWarning: Glyph 35757 (\\N{CJK UNIFIED IDEOGRAPH-8BAD}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\events.py:89: UserWarning: Glyph 32451 (\\N{CJK UNIFIED IDEOGRAPH-7EC3}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\events.py:89: UserWarning: Glyph 38598 (\\N{CJK UNIFIED IDEOGRAPH-96C6}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\events.py:89: UserWarning: Glyph 27979 (\\N{CJK UNIFIED IDEOGRAPH-6D4B}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\events.py:89: UserWarning: Glyph 35797 (\\N{CJK UNIFIED IDEOGRAPH-8BD5}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\events.py:89: UserWarning: Glyph 39564 (\\N{CJK UNIFIED IDEOGRAPH-9A8C}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\events.py:89: UserWarning: Glyph 35777 (\\N{CJK UNIFIED IDEOGRAPH-8BC1}) missing from current font.\n",
      "  func(*args, **kwargs)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\pylabtools.py:152: UserWarning: Glyph 35757 (\\N{CJK UNIFIED IDEOGRAPH-8BAD}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\pylabtools.py:152: UserWarning: Glyph 32451 (\\N{CJK UNIFIED IDEOGRAPH-7EC3}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\pylabtools.py:152: UserWarning: Glyph 38598 (\\N{CJK UNIFIED IDEOGRAPH-96C6}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\pylabtools.py:152: UserWarning: Glyph 27979 (\\N{CJK UNIFIED IDEOGRAPH-6D4B}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\pylabtools.py:152: UserWarning: Glyph 35797 (\\N{CJK UNIFIED IDEOGRAPH-8BD5}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\pylabtools.py:152: UserWarning: Glyph 39564 (\\N{CJK UNIFIED IDEOGRAPH-9A8C}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "F:\\ProgramData\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\IPython\\core\\pylabtools.py:152: UserWarning: Glyph 35777 (\\N{CJK UNIFIED IDEOGRAPH-8BC1}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjgAAAGdCAYAAAAfTAk2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAnwUlEQVR4nO3df3RU9Z3/8dckmUyIkggE8qMEiOgCHlqXTVYMbYSqDGBrtcJZW9usewqsbJaykEPd8GPXQI+mshwaXYRUGpb2aJVzluK6LhszrhKoCUIwVEXK/mgCrmSKsZAJhE0mmfv9g29SxxnCnZBJyGeej3M4x7n38/ncz33nA3l5750Zh2VZlgAAAAwSN9QTAAAAGGgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcRKGegJDIRAI6MyZMxo5cqQcDsdQTwcAANhgWZba2tqUlZWluLi+r9HEZMA5c+aMsrOzh3oaAACgHz766CONHz++zzYxGXBGjhwp6XKBUlJSBnRsv9+v6upqud1uOZ3OAR3bNNTKPmplH7Wyj1pFhnrZF61a+Xw+ZWdn9/4e70tMBpye21IpKSlRCTjJyclKSUnhL8BVUCv7qJV91Mo+ahUZ6mVftGtl5/ESHjIGAADGIeAAAADjEHAAAIBxYvIZHABAbLAsS11dXeru7r7msfx+vxISEvR///d/AzKeya6lVk6nU/Hx8dc8BwIOAMBInZ2dam5uVnt7+4CMZ1mWMjIy9NFHH/EZaldxLbVyOBwaP368brzxxmuaAwEHAGCcQCCgxsZGxcfHKysrS4mJidccSgKBgC5cuKAbb7zxqh8yF+v6WyvLsvTJJ5/of//3f3Xrrbde05UcAg4AwDidnZ0KBALKzs5WcnLygIwZCATU2dmppKQkAs5VXEutxo4dq6amJvn9/msKOPyEAADGIogMPwN1+4+fPAAAMA4BBwAAGIdncAAAuE7U1taqqKgo7L758+ervr5eLS0tYfcfPnxYFRUV2rlzZ9j969ev16JFiwZsrtc7Ag4AANcJn8+nBx98UKWlpUHbm5qaVFJSogsXLujYsWMh/ebMmaNAIKAzZ86ovLxcc+bMCdq/a9euKwYjU3GLCgAAGIcrOACAmGBZli75+/8JxIFAQJc6u5XQ2RXxu7NGOOP5cMBBRsABAMSES/5u3fb3rw/JsT/cOE/JifzKHUzcogIAAMYhTgIAYsIIZ7w+3Div3/0DgYDafG0amTKyX7eoMLgIOACAmOBwOK7pNlEgEFBXYrySExP4hORhgJ8QAAAwDgEHAAAYh4ADAACMQ8ABAADG4SFjAACuE6mpqXrttdf02muvheybN2+ezp8/r7y8vLB94+LiNH78eK1evTrs/rVr1w7oXK93BBwAAK4T+fn5qq+v73f/5cuXa/ny5QM4o+GLW1QAAMA4BBwAAGAcAg4AADAOAQcAABiHgAMAAIxDwAEAAMYh4AAAAOMQcAAAiDGdnZ265ZZb9Pbbbw/aMTs6OjRhwgQdPXp0UI7HB/0BAHCdqK2tVVFRUdh98+fPV319vVpaWsLuP3z4sCoqKrRz586w+9evX69FixZJkp5//nlNnDhRX/7ylyVJJSUlqqqqCttv27ZtktTnvH70ox/p3nvvDZpbd3e34uPje+fmcrm0evVq/e3f/q3eeOONsGMNJAIOAADXCZ/PpwcffFClpaVB25uamlRSUqILFy7o2LFjIf3mzJmjQCCgM2fOqLy8XHPmzAnav2vXrqDw8Y//+I9Bx2hqatIrr7yiSZMmBfUrLS2Vz+eTpD7nJSloboFAQD6fTykpKbr77rsVCAQkSd/5znf0gx/8QCdOnNC0adPsFaWfCDgAgNhgWZK/vf/9A4HL/TvjpbgIn/BwJksOR/+PPYDeffdd/fd//7e+9rWvDfqxx4wZo1mzZumll17Sxo0bo3osAg4AIDb426WnsvrdPU7STf3tvPaMlHhDv489kA4cOKA/+qM/UkpKypAc/4477tDBgwejfhweMgYAIIY0NTUpK6v/Qe9afeELX1BTU1PUj8MVHABAbHAmX76S0k+BQEC+tjaljBypuP7corpOXLp0SUlJSUN2/BEjRqi9/RpuFdpEwAEAxAaH49puEwUCkrP78hiRBpzrSFpamt5///0hO/7vf/97jR07NurHGb4/IQAAELEZM2boN7/5jSzLGpLjf/DBB5oxY0bUj0PAAQAghnz1q1/VxYsXdfz48SE5/sGDB+V2u6N+HAIOAAAxZMyYMXrooYf04osvDvqx6+rq1Nra2vuBg9FEwAEAIMasXbtWO3fuVFtb26Aed8uWLfrBD36gESNGRP1YgxJwtm3bppycHCUlJSk3N/eq73+vqalRbm6ukpKSdPPNN6uiouKKbV9++WU5HA49+OCDAzxrAADM9MUvflGbNm0alLdr9+jo6NDtt9+uVatWDcrxov4uqt27d2vlypXatm2bvvzlL+snP/mJFixYoA8//FATJkwIad/Y2Kj77rtPS5cu1QsvvKC3335bRUVFGjt2rBYuXBjU9tSpU1q9erUKCgqifRoAAERdamqqXnvtNb322msh++bNm6fz588rLy8vbN+4uDiNHz9eq1evDrt/7dq1Qa8fffTR3v+ePHnyFW8bzZs3T5L6nJck3XTTTUFz++x3UcXFxSkxMVHr168Pe4xoiHrA2bJlixYvXqwlS5ZIksrLy/X6669r+/btKisrC2lfUVGhCRMmqLy8XJI0bdo01dfXa/PmzUEBp7u7W9/5zne0YcMGHTx4UOfPn4/2qQAAEFX5+fmqr6/vd//ly5dr+fLlEfd78skn9eSTT/bZ5mrz+uyXdX72u6gi/sygARLVgNPZ2amjR4/2fhFXD7fbrdra2rB96urqQp6unjdvniorK+X3++V0OiVJGzdu1NixY7V48eKr3vLq6OhQR0dH7+ueLw7z+/3y+/0Rn1dfesYb6HFNRK3so1b2USv7TK6V3++XZVkKBAK9X/R4rXreVt0zLq7sWmoVCARkWZb8fn/vFaAekazVqAaclpYWdXd3Kz09PWh7enq6vF5v2D5erzds+66uLrW0tCgzM1Nvv/22Kisrw36jajhlZWXasGFDyPbq6molJ0fn0yU9Hk9UxjURtbKPWtlHrewzsVYJCQnKyMhQW1ubOjs7B3TswX4wdzjrT606Ozt16dIlHThwQF1dXUH7IvkE5EH5JGPH575B1bKskG1Xa9+zva2tTd/97ne1Y8cOpaWl2Tr+mjVrVFxc3Pva5/MpOztbbrd7wL9szO/3y+PxaO7cub1XmxAetbKPWtlHrewzuVbd3d367W9/q7i4uAH7d96yLLW1tWnkyJF9/g7DtdXK5/NpxIgRuvvuu5WQkBCyz66oBpy0tDTFx8eHXK05e/ZsyFWaHhkZGWHbJyQkaMyYMTp+/Liampp0//339+7vufyVkJCgkydPavLkyUH9XS6XXC5XyLGcTmfU/lJHc2zTUCv7qJV91Mo+E2vldDo1atQotbS0KC4uTsnJydccSgKBgDo7O9XR0TFkz5UMF/2tVSAQUEtLi2644QYlJSWF/MwiWadRDTiJiYnKzc2Vx+PRN7/5zd7tHo9HDzzwQNg++fn5+td//degbdXV1crLy5PT6dTUqVNDvkNj/fr1amtr0zPPPKPs7OyBPxEAwLCTkZEh6fL/JA8Ey7J06dIljRgxgis4V3EttYqLi9OECROuucZRv0VVXFyswsJC5eXlKT8/X88//7xOnz6tZcuWSbp8++jjjz/Wz3/+c0nSsmXLtHXrVhUXF2vp0qWqq6tTZWWlXnrpJUlSUlKSpk+fHnSMm266SZJCtgMAYpfD4VBmZqbGjRs3IA9S+/1+HThwQHfddZdxV7wG2rXUKjExcUCukEU94Dz88MP69NNPtXHjRjU3N2v69Onat2+fJk6cKElqbm7W6dOne9vn5ORo3759WrVqlZ577jllZWXp2WefDfkMHAAA7IiPjw95N05/x+nq6lJSUhIB5yquh1oNykPGRUVFKioqCrtv165dIdtmz56td9991/b44cYAAACxi6ekAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGAcAg4AADAOAQcAABiHgAMAAIxDwAEAAMYh4AAAAOMQcAAAgHEIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGAcAg4AADAOAQcAABiHgAMAAIxDwAEAAMYh4AAAAOMQcAAAgHEIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjDErA2bZtm3JycpSUlKTc3FwdPHiwz/Y1NTXKzc1VUlKSbr75ZlVUVATt37FjhwoKCjRq1CiNGjVK9957rw4fPhzNUwAAAMNI1APO7t27tXLlSq1bt04NDQ0qKCjQggULdPr06bDtGxsbdd9996mgoEANDQ1au3atVqxYoT179vS22b9/v7797W/rrbfeUl1dnSZMmCC3262PP/442qcDAACGgagHnC1btmjx4sVasmSJpk2bpvLycmVnZ2v79u1h21dUVGjChAkqLy/XtGnTtGTJEn3ve9/T5s2be9u8+OKLKioq0h//8R9r6tSp2rFjhwKBgP7jP/4j2qcDAACGgYRoDt7Z2amjR4+qpKQkaLvb7VZtbW3YPnV1dXK73UHb5s2bp8rKSvn9fjmdzpA+7e3t8vv9Gj16dNgxOzo61NHR0fva5/NJkvx+v/x+f0TndDU94w30uCaiVvZRK/uolX3UKjLUy75o1SqS8aIacFpaWtTd3a309PSg7enp6fJ6vWH7eL3esO27urrU0tKizMzMkD4lJSX6whe+oHvvvTfsmGVlZdqwYUPI9urqaiUnJ9s9nYh4PJ6ojGsiamUftbKPWtlHrSJDvewb6Fq1t7fbbhvVgNPD4XAEvbYsK2Tb1dqH2y5JmzZt0ksvvaT9+/crKSkp7Hhr1qxRcXFx72ufz6fs7Gy53W6lpKTYPg87/H6/PB6P5s6dG/ZqE/6AWtlHreyjVvZRq8hQL/uiVaueOzB2RDXgpKWlKT4+PuRqzdmzZ0Ou0vTIyMgI2z4hIUFjxowJ2r5582Y99dRTeuONN/SlL33pivNwuVxyuVwh251OZ9QWaTTHNg21so9a2Uet7KNWkaFe9g10rSIZK6oPGScmJio3NzfkEpXH49GsWbPC9snPzw9pX11drby8vKAT+4d/+Af98Ic/VFVVlfLy8gZ+8gAAYNiK+ruoiouL9dOf/lQ7d+7UiRMntGrVKp0+fVrLli2TdPn20Z//+Z/3tl+2bJlOnTql4uJinThxQjt37lRlZaVWr17d22bTpk1av369du7cqUmTJsnr9crr9erChQvRPh0AADAMRP0ZnIcffliffvqpNm7cqObmZk2fPl379u3TxIkTJUnNzc1Bn4mTk5Ojffv2adWqVXruueeUlZWlZ599VgsXLuxts23bNnV2dmrRokVBx3riiSdUWloa7VMCAADXuUF5yLioqEhFRUVh9+3atStk2+zZs/Xuu+9ecbympqYBmhkAADAR30UFAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGAcAg4AADAOAQcAABiHgAMAAIxDwAEAAMYh4AAAAOMQcAAAgHEIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGAcAg4AADAOAQcAABiHgAMAAIxDwAEAAMYh4AAAAOMQcAAAgHEIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGAcAg4AADAOAQcAABhnUALOtm3blJOTo6SkJOXm5urgwYN9tq+pqVFubq6SkpJ08803q6KiIqTNnj17dNttt8nlcum2227T3r17ozV9AAAwzEQ94OzevVsrV67UunXr1NDQoIKCAi1YsECnT58O276xsVH33XefCgoK1NDQoLVr12rFihXas2dPb5u6ujo9/PDDKiws1K9//WsVFhbqz/7sz/TOO+9E+3QAAMAwkBDtA2zZskWLFy/WkiVLJEnl5eV6/fXXtX37dpWVlYW0r6io0IQJE1ReXi5JmjZtmurr67V582YtXLiwd4y5c+dqzZo1kqQ1a9aopqZG5eXleumll6J9SldkBQJqv9CqLn+H2i+0yul0DtlchgO/30+tbKJW9lEr+6hVZKiXfT21sgKBIZtDVANOZ2enjh49qpKSkqDtbrdbtbW1YfvU1dXJ7XYHbZs3b54qKyvl9/vldDpVV1enVatWhbTpCUWf19HRoY6Ojt7XPp9P0uUfgN/vj/S0rqj9QqtSn5mshZL0wYANazRqZR+1so9a2UetIkO97FsoqWX2bKXeNHrAxozkd3ZUA05LS4u6u7uVnp4etD09PV1erzdsH6/XG7Z9V1eXWlpalJmZecU2VxqzrKxMGzZsCNleXV2t5OTkSE6pT13+jsuLHwAAqKamRglO14CN197ebrtt1G9RSZLD4Qh6bVlWyLartf/89kjGXLNmjYqLi3tf+3w+ZWdny+12KyUlxd5J2GAFAmqZPVs1NTWaPXu2nAnxAza2ifxd3dTKJmplH7Wyj1pFhnrZ11Or+fPvU6Jr4AJOzx0YO6IacNLS0hQfHx9yZeXs2bMhV2B6ZGRkhG2fkJCgMWPG9NnmSmO6XC65whTY6XQO+H3U1JtGK8HpUupNo7lHexV+v59a2USt7KNW9lGryFAv+3pqlehyDWitIhkrqu+iSkxMVG5urjweT9B2j8ejWbNmhe2Tn58f0r66ulp5eXm9J3alNlcaEwAAxJao36IqLi5WYWGh8vLylJ+fr+eff16nT5/WsmXLJF2+ffTxxx/r5z//uSRp2bJl2rp1q4qLi7V06VLV1dWpsrIy6N1Rf/M3f6O77rpLTz/9tB544AH9y7/8i9544w396le/ivbpAACAYSDqAefhhx/Wp59+qo0bN6q5uVnTp0/Xvn37NHHiRElSc3Nz0Gfi5OTkaN++fVq1apWee+45ZWVl6dlnn+19i7gkzZo1Sy+//LLWr1+vv/u7v9PkyZO1e/duzZw5M9qnAwAAhoFBeci4qKhIRUVFYfft2rUrZNvs2bP17rvv9jnmokWLtGjRooGYHgAAMAzfRQUAAIxDwAEAAMYh4AAAAOMQcAAAgHEIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGAcAg4AADAOAQcAABiHgAMAAIxDwAEAAMYh4AAAAOMQcAAAgHEIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGAcAg4AADAOAQcAABiHgAMAAIxDwAEAAMYh4AAAAOMQcAAAgHEIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGCeqAefcuXMqLCxUamqqUlNTVVhYqPPnz/fZx7IslZaWKisrSyNGjNCcOXN0/Pjx3v2///3v9f3vf19TpkxRcnKyJkyYoBUrVqi1tTWapwIAAIaRqAacRx55RMeOHVNVVZWqqqp07NgxFRYW9tln06ZN2rJli7Zu3aojR44oIyNDc+fOVVtbmyTpzJkzOnPmjDZv3qz3339fu3btUlVVlRYvXhzNUwEAAMNIQrQGPnHihKqqqnTo0CHNnDlTkrRjxw7l5+fr5MmTmjJlSkgfy7JUXl6udevW6aGHHpIk/exnP1N6erp+8Ytf6LHHHtP06dO1Z8+e3j6TJ0/Wk08+qe9+97vq6upSQkLUTgkAAAwTUbuCU1dXp9TU1N5wI0l33nmnUlNTVVtbG7ZPY2OjvF6v3G537zaXy6XZs2dfsY8ktba2KiUlhXADAAAkRfEKjtfr1bhx40K2jxs3Tl6v94p9JCk9PT1oe3p6uk6dOhW2z6effqof/vCHeuyxx644l46ODnV0dPS+9vl8kiS/3y+/39/3iUSoZ7yBHtdE1Mo+amUftbKPWkWGetkXrVpFMl7EAae0tFQbNmzos82RI0ckSQ6HI2SfZVlht3/W5/dfqY/P59PXvvY13XbbbXriiSeuOF5ZWVnYOVdXVys5ObnPufSXx+OJyrgmolb2USv7qJV91Coy1Mu+ga5Ve3u77bYRB5zly5frW9/6Vp9tJk2apPfee0+/+93vQvZ98sknIVdoemRkZEi6fCUnMzOzd/vZs2dD+rS1tWn+/Pm68cYbtXfvXjmdzivOZ82aNSouLu597fP5lJ2dLbfbrZSUlD7PJVJ+v18ej0dz587tc06gVpGgVvZRK/uoVWSol33RqlXPHRg7Ig44aWlpSktLu2q7/Px8tba26vDhw7rjjjskSe+8845aW1s1a9assH1ycnKUkZEhj8ejGTNmSJI6OztVU1Ojp59+uredz+fTvHnz5HK59OqrryopKanPubhcLrlcrpDtTqczaos0mmObhlrZR63so1b2UavIUC/7BrpWkYwVtYeMp02bpvnz52vp0qU6dOiQDh06pKVLl+rrX/960Duopk6dqr1790q6fGtq5cqVeuqpp7R371598MEH+ou/+AslJyfrkUcekXT5yo3b7dbFixdVWVkpn88nr9crr9er7u7uaJ0OAAAYRqL6tqMXX3xRK1as6H1X1De+8Q1t3bo1qM3JkyeDPqTv8ccf16VLl1RUVKRz585p5syZqq6u1siRIyVJR48e1TvvvCNJuuWWW4LGamxs1KRJk6J4RgAAYDiIasAZPXq0XnjhhT7bWJYV9NrhcKi0tFSlpaVh28+ZMyekDwAAwGfxXVQAAMA4BBwAAGAcAg4AADAOAQcAABiHgAMAAIxDwAEAAMYh4AAAAOMQcAAAgHEIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGAcAg4AADAOAQcAABiHgAMAAIxDwAEAAMYh4AAAAOMQcAAAgHEIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGAcAg4AADAOAQcAABiHgAMAAIxDwAEAAMYh4AAAAOMQcAAAgHEIOAAAwDhRDTjnzp1TYWGhUlNTlZqaqsLCQp0/f77PPpZlqbS0VFlZWRoxYoTmzJmj48ePX7HtggUL5HA49Morrwz8CQAAgGEpqgHnkUce0bFjx1RVVaWqqiodO3ZMhYWFffbZtGmTtmzZoq1bt+rIkSPKyMjQ3Llz1dbWFtK2vLxcDocjWtMHAADDVEK0Bj5x4oSqqqp06NAhzZw5U5K0Y8cO5efn6+TJk5oyZUpIH8uyVF5ernXr1umhhx6SJP3sZz9Tenq6fvGLX+ixxx7rbfvrX/9aW7Zs0ZEjR5SZmRmt0wAAAMNQ1AJOXV2dUlNTe8ONJN15551KTU1VbW1t2IDT2Ngor9crt9vdu83lcmn27Nmqra3tDTjt7e369re/ra1btyojI+Oqc+no6FBHR0fva5/PJ0ny+/3y+/39PsdwesYb6HFNRK3so1b2USv7qFVkqJd90apVJONFLeB4vV6NGzcuZPu4cePk9Xqv2EeS0tPTg7anp6fr1KlTva9XrVqlWbNm6YEHHrA1l7KyMm3YsCFke3V1tZKTk22NESmPxxOVcU1EreyjVvZRK/uoVWSol30DXav29nbbbSMOOKWlpWHDwmcdOXJEksI+H2NZ1lWfm/n8/s/2efXVV/Xmm2+qoaHB9pzXrFmj4uLi3tc+n0/Z2dlyu91KSUmxPY4dfr9fHo9Hc+fOldPpHNCxTUOt7KNW9lEr+6hVZKiXfdGqVc8dGDsiDjjLly/Xt771rT7bTJo0Se+9955+97vfhez75JNPQq7Q9Oi53eT1eoOeqzl79mxvnzfffFP/8z//o5tuuimo78KFC1VQUKD9+/eHjOtyueRyuUK2O53OqC3SaI5tGmplH7Wyj1rZR60iQ73sG+haRTJWxAEnLS1NaWlpV22Xn5+v1tZWHT58WHfccYck6Z133lFra6tmzZoVtk9OTo4yMjLk8Xg0Y8YMSVJnZ6dqamr09NNPS5JKSkq0ZMmSoH5f/OIX9eMf/1j3339/pKcDAAAMFLVncKZNm6b58+dr6dKl+slPfiJJ+su//Et9/etfD3rAeOrUqSorK9M3v/lNORwOrVy5Uk899ZRuvfVW3XrrrXrqqaeUnJysRx55RNLlqzzhHiyeMGGCcnJyonU6AABgGIlawJGkF198UStWrOh9V9Q3vvENbd26NajNyZMn1dra2vv68ccf16VLl1RUVKRz585p5syZqq6u1siRI6M5VQAAYJCoBpzRo0frhRde6LONZVlBrx0Oh0pLS1VaWmr7OJ8fAwAAxDa+iwoAABiHgAMAAIxDwAEAAMYh4AAAAOMQcAAAgHEIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGAcAg4AADAOAQcAABiHgAMAAIxDwAEAAMYh4AAAAOMQcAAAgHEIOAAAwDgEHAAAYBwCDgAAMA4BBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMkzDUExgKlmVJknw+34CP7ff71d7eLp/PJ6fTOeDjm4Ra2Uet7KNW9lGryFAv+6JVq57f2z2/x/sSkwGnra1NkpSdnT3EMwEAAJFqa2tTampqn20clp0YZJhAIKAzZ85o5MiRcjgcAzq2z+dTdna2PvroI6WkpAzo2KahVvZRK/uolX3UKjLUy75o1cqyLLW1tSkrK0txcX0/ZROTV3Di4uI0fvz4qB4jJSWFvwA2USv7qJV91Mo+ahUZ6mVfNGp1tSs3PXjIGAAAGIeAAwAAjEPAGWAul0tPPPGEXC7XUE/luket7KNW9lEr+6hVZKiXfddDrWLyIWMAAGA2ruAAAADjEHAAAIBxCDgAAMA4BBwAAGAcAk4/bNu2TTk5OUpKSlJubq4OHjzYZ/uamhrl5uYqKSlJN998syoqKgZppkMvklrt379fDocj5M9vfvObQZzx0Dhw4IDuv/9+ZWVlyeFw6JVXXrlqn1hdV5HWKlbXVVlZmf70T/9UI0eO1Lhx4/Tggw/q5MmTV+0Xq+uqP/WK1bW1fft2felLX+r9EL/8/Hz9+7//e599hmJdEXAitHv3bq1cuVLr1q1TQ0ODCgoKtGDBAp0+fTps+8bGRt13330qKChQQ0OD1q5dqxUrVmjPnj2DPPPBF2mtepw8eVLNzc29f2699dZBmvHQuXjxom6//XZt3brVVvtYXleR1qpHrK2rmpoa/fVf/7UOHTokj8ejrq4uud1uXbx48Yp9Ynld9adePWJtbY0fP14/+tGPVF9fr/r6et1999164IEHdPz48bDth2xdWYjIHXfcYS1btixo29SpU62SkpKw7R9//HFr6tSpQdsee+wx684774zaHK8XkdbqrbfesiRZ586dG4TZXb8kWXv37u2zTSyvq8+yUyvW1WVnz561JFk1NTVXbMO6+gM79WJt/cGoUaOsn/70p2H3DdW64gpOBDo7O3X06FG53e6g7W63W7W1tWH71NXVhbSfN2+e6uvr5ff7ozbXodafWvWYMWOGMjMzdc899+itt96K5jSHrVhdV9ci1tdVa2urJGn06NFXbMO6+gM79eoRy2uru7tbL7/8si5evKj8/PywbYZqXRFwItDS0qLu7m6lp6cHbU9PT5fX6w3bx+v1hm3f1dWllpaWqM11qPWnVpmZmXr++ee1Z88e/fKXv9SUKVN0zz336MCBA4Mx5WElVtdVf7CuLn8Dc3Fxsb7yla9o+vTpV2zHurrMbr1ieW29//77uvHGG+VyubRs2TLt3btXt912W9i2Q7WuYvLbxK+Vw+EIem1ZVsi2q7UPt91EkdRqypQpmjJlSu/r/Px8ffTRR9q8ebPuuuuuqM5zOIrldRUJ1pW0fPlyvffee/rVr3511basK/v1iuW1NWXKFB07dkznz5/Xnj179Oijj6qmpuaKIWco1hVXcCKQlpam+Pj4kCsQZ8+eDUmnPTIyMsK2T0hI0JgxY6I216HWn1qFc+edd+q//uu/Bnp6w16srquBEkvr6vvf/75effVVvfXWWxo/fnyfbVlXkdUrnFhZW4mJibrllluUl5ensrIy3X777XrmmWfCth2qdUXAiUBiYqJyc3Pl8XiCtns8Hs2aNStsn/z8/JD21dXVysvLk9PpjNpch1p/ahVOQ0ODMjMzB3p6w16srquBEgvryrIsLV++XL/85S/15ptvKicn56p9Ynld9ade4cTC2grHsix1dHSE3Tdk6yqqjzAb6OWXX7acTqdVWVlpffjhh9bKlSutG264wWpqarIsy7JKSkqswsLC3va//e1vreTkZGvVqlXWhx9+aFVWVlpOp9P653/+56E6hUETaa1+/OMfW3v37rX+8z//0/rggw+skpISS5K1Z8+eoTqFQdPW1mY1NDRYDQ0NliRry5YtVkNDg3Xq1CnLslhXnxVprWJ1Xf3VX/2VlZqaau3fv99qbm7u/dPe3t7bhnX1B/2pV6yurTVr1lgHDhywGhsbrffee89au3atFRcXZ1VXV1uWdf2sKwJOPzz33HPWxIkTrcTEROtP/uRPgt5G+Oijj1qzZ88Oar9//35rxowZVmJiojVp0iRr+/btgzzjoRNJrZ5++mlr8uTJVlJSkjVq1CjrK1/5ivVv//ZvQzDrwdfzdtPP/3n00Ucty2JdfVaktYrVdRWuRpKsf/qnf+ptw7r6g/7UK1bX1ve+973ef9fHjh1r3XPPPb3hxrKun3XlsKz//6QPAACAIXgGBwAAGIeAAwAAjEPAAQAAxiHgAAAA4xBwAACAcQg4AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADj/D/p7kNZ0g/ABgAAAABJRU5ErkJggg=="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制准确率\n",
    "plt.figure()\n",
    "plt.plot(history.history['accuracy'], label='训练集')\n",
    "plt.plot(history.history['val_accuracy'], label=\"测试集(验证集)\")\n",
    "plt.legend()\n",
    "plt.grid()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-13T06:36:52.774380900Z",
     "start_time": "2024-01-13T06:36:52.487564Z"
    }
   },
   "id": "5f9d0ecc5b7f09bf"
  },
  {
   "cell_type": "markdown",
   "source": [
    "## tensorboard监控"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "5eadc2b5af64aa5e"
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "outputs": [],
   "source": [
    "# 回调函数输出路径，在CMD中使用tensorboard --logdir=\"./\" ，然后在浏览器上查看\n",
    "cb = keras.callbacks.TensorBoard(log_dir='./logs')"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-12T14:27:44.276617900Z",
     "start_time": "2024-01-12T14:27:44.215635100Z"
    }
   },
   "id": "8b08eed320adac8c"
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/4\n",
      "263/263 [==============================] - 3s 10ms/step - loss: 0.1316 - accuracy: 0.0000e+00 - val_loss: 0.1772 - val_accuracy: 0.0000e+00\n",
      "Epoch 2/4\n",
      "263/263 [==============================] - 3s 10ms/step - loss: 0.1188 - accuracy: 0.0000e+00 - val_loss: 0.1777 - val_accuracy: 0.0000e+00\n",
      "Epoch 3/4\n",
      "263/263 [==============================] - 3s 10ms/step - loss: 0.1116 - accuracy: 0.0000e+00 - val_loss: 0.1675 - val_accuracy: 0.0000e+00\n",
      "Epoch 4/4\n",
      "263/263 [==============================] - 3s 10ms/step - loss: 0.1068 - accuracy: 0.0000e+00 - val_loss: 0.1565 - val_accuracy: 0.0000e+00\n"
     ]
    }
   ],
   "source": [
    "# fit,需要参数，:指定训练集，epochs,bath_size,val,verbose\n",
    "history = model.fit(x_train,\n",
    "                    y_train,  #\n",
    "                    epochs=4,\n",
    "                    batch_size=128,\n",
    "                    validation_data=(x_test,\n",
    "                                     y_test  #\n",
    "                                     ),\n",
    "                    verbose=1,\n",
    "                    callbacks=[cb])\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-12T14:28:39.920227800Z",
     "start_time": "2024-01-12T14:28:28.837193Z"
    }
   },
   "id": "fc48a8f391f4f0eb"
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "263/263 [==============================] - 1s 3ms/step - loss: 0.1565 - accuracy: 0.0000e+00\n"
     ]
    },
    {
     "data": {
      "text/plain": "[0.1565435528755188, 0.0]"
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.evaluate(x_test,y_test,verbose=1)\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-12T14:34:38.699631400Z",
     "start_time": "2024-01-12T14:34:37.700857700Z"
    }
   },
   "id": "cf63f2c0f548020a"
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "outputs": [],
   "source": [
    "# 模型保存&读取\n",
    "model.save('xxxx.h5')\n",
    "# keras.models.load_model('xxxx.h5')"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-12T14:36:10.058685900Z",
     "start_time": "2024-01-12T14:36:09.956572900Z"
    }
   },
   "id": "5d9d7c6f4429345e"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false
   },
   "id": "ca0a086570f6550f"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
